多要素認証ページをカスタマイズする

Auth0 ダッシュボードのユニバーサル ログイン設定セクションでユニバーサル ログインのブランド オプションを調整することで、ユーザーに表示される MFA ページをカスタマイズできます。

ユニバーサル ログイン エクスペリエンスを使用している場合は、フローのカスタマイズ オプションを使用してページをカスタマイズできます。

また、HTMLコンテンツの全体をカスタマイズして、組織に固有なユーザーエクスペリエンス要件を反映させることもできます。詳細については、「MFAウィジェットテーマオプション」をご覧ください。

ユニバーサル ログイン エクスペリエンスにより、MFA がユーザーにとってさらにシンプルに提供されます。ユーザーがログイン画面に資格情報を入力すると、MFA画面が表示されます。MFA要素を登録していない場合は登録が要求され、登録済みの場合はMFA資格情報の提示が要求されます。

MFA APIを使用する

Auth0は、次のシナリオでMFA APIを提供します。

MFA APIを使用するには、アプリケーションに対してMFAの付与タイプを有効にしなければなりません。Auth0 DashboardでMFA付与を有効にするには、以下を行います。

  1. [Dashboard]>[Applications(アプリケーション)]>[Applications(アプリケーション)]に移動して、アプリケーションを選択します。

  2. [Settings(設定)]タブの下部にある[Advanced Settings(詳細設定)]をクリックします。

  3. [Grant Types(付与タイプ)]タブをクリックし、MFA を選択します。

    Dashboard Applications Applications Advanced Settings Grant Types tab

    詳細については、「多要素認証(MFA)を有効にする」をお読みください。

  4. [Save Changes(変更を保存)]をクリックします。

制限事項

MFA APIは、SMS、Guardianアプリケーションのプッシュ通知、メール、OTP要素と連動するように設計されています。Duoでの登録には対応していません。

Actionsを使ってMFAポリシーをカスタマイズする

Actionsを使ってテナント向けのMFAポリシーをカスタマイズし、特定のアプリケーションのユーザーや、特定のユーザーメタデータまたはIPアドレス範囲を持つユーザーなどを対象にMFAを要求することができます。

アクションの作成に慣れていない場合は、「最初のアクションの作成」をお読みください。

アクションを作成するときに、プロバイダー設定を使用して、MFAの強制の有無および使用する要素を指定できます。動作は、クラシック ログイン エクスペリエンスを使用するか、ユニバーサル ログイン エクスペリエンスを使用するかによって異なります。

プロバイダー クラシックログインエクスペリエンス ユニバーサルログインエクスペリエンス
guardian プッシュ、SMS、またはOTP Push、SMS、音声、OTP、メール、またはWebAuthnセキュリティキー(有効な場合)
guardian プッシュ、SMS、またはOTP プッシュ、SMS、OTP、またはメール
google-authenticator Google Authenticator プッシュ、SMS、OTP、またはメール
duo Duo Duo

ユニバーサル ログインを使用している場合は、MFA ログイン ページのカスタマイズを有効にすると、クラシック ログイン エクスペリエンスの動作を実現できます。

プロバイダーを特定のオプションに手動で設定すると、ダッシュボードの有効/無効の切り替えが上書きされます。Dashboardで他の要素が有効になっているのに、ユーザーにDuoでの登録を要求するには、次のようなActionを使用します。

exports.onExecutePostLogin = async (event, api) => {
    // Forcing the provider to Duo programmatically
    api.multifactor.enable('duo')
}

Was this helpful?

/

一般的なユースケースの例

ここでは、Actionsで処理できる一般的なMFAシナリオをいくつかご紹介します。

特定のアプリケーションにMFAを要求する

MFAをカスタマイズして、ユーザーが特定のアプリケーションにログインするときのみトリガーされるようにします。

exports.onExecutePostLogin = async (event, api) => {
	const CLIENTS_WITH_MFA = [
		'{yourClientId1}', 
		'{yourClientId2}',
		'{yourClientId3}'
	];

	if (CLIENTS_WITH_MFA.includes(event.client.client_id)) {
		api.multifactor.enable('duo', { allowRememberBrowser: false })
	}
}

Was this helpful?

/

特定のユーザーにMFAを要求する

MFAをカスタマイズして、MFAを使用するようマークされたユーザーに対してのみ、トリガーされるようにします。

exports.onExecutePostLogin = async (event, api) => {
  if (event.user.user_metadata && event.user.user_metadata.use_mfa) {
    api.multifactor.enable('duo', { allowRememberBrowser: false });
  }
}

Was this helpful?

/

MFAプロンプトの頻度を変更する

状況によっては、同じブラウザーを使ってログインしているユーザーに対し、毎回MFAを求めるプロンプトを表示したくないことがあります。allowRememberBrowser プロパティを使用してこの動作を変更できます:

exports.onExecutePostLogin = async (event, api) => {  
  api.multifactor.enable('any', { allowRememberBrowser: false });
}

Was this helpful?

/

プロパティの値に応じて、以下のような動作になります。

説明
true プロバイダーがgoogle-authenticatorまたはduoに設定されている場合、ユーザーは30日ごとにMFAを求められます。プロバイダーがguardianに設定されている場合、MFAプロンプトにはユーザーが登録するかどうかを選択するための登録チェックボックスが表示されます。デフォルトはfalseです。詳細については、「多要素認証ページをカスタマイズする」をお読みください
false ユーザーは認証ごとにMFAを求められます。

時間の値はアクティブなユーザー用です。ユーザーが 7 日間以上非アクティブの場合、Cookie は期限切れとなり、次回のログイン試行時に MFA の入力を求められます (allowRememberBrowsertrue に設定されていて、最後の MFA プロンプトから 30 日が経過していないかどうかに関係なく)。

ユーザーにMFAのスキップを許可した場合、ユーザーのブラウザーにCookieが保管されます。ユーザーがCookieのセットを持っている場合でもMFAを要求するには、次の2つのオプションがあります。

  • allowRememberBrowserfalse に設定します

  • /authorize エンドポイントを呼び出す際に、acr_valueshttp://schemas.openid.net/pape/policies/2007/06/multi-factorに設定します。

ユーザーが信頼できるデバイスを紛失した場合、Auth0 Management API Invalidate Remember Browser エンドポイントを呼び出すことで、次回のログイン時に特定のユーザーに MFA を要求することができます。

ネットワーク外部のユーザーにMFAを要求する

内部IPアドレスのネットワークについてはアクセスが適切に制御されていると仮定した場合、企業ネットワークの外から要求を送信してくるユーザーにのみ、Auth0がMFAを要求するようにできます。

exports.onExecutePostLogin = async (event, api) => {
  const ipaddr = require('ipaddr.js@1.9.0');
  const corp_network = '192.168.1.134/26';
  const current_ip = ipaddr.parse(event.request.ip);

  if (!current_ip.match(ipaddr.parseCIDR(corp_network))) {
    api.multifactor.enable('any', {allowRememberBrowser: false});
  }
}

Was this helpful?

/

リフレッシュトークンの要求でMFAをバイパスする

ユーザーによる頻繁なログアウトが報告された場合は、MFAを使用しながらもリフレッシュトークンの要求をバイパスすることができます。event.transaction.protocol オブジェクト プロパティのフィルター アクションを使用して、デフォルトの動作を変更できます。

exports.onExecutePostLogin = async (event, api) => {
  if (event.transaction.protocol !== 'oauth2-refresh-token') {
    // MFA-related commands here
    api.multifactor.enable('any');
  }
};

Was this helpful?

/

アクションのeventオブジェクトの詳細については、「Actionsのトリガー:ログイン後 - eventオブジェクト」を参照してください。

もっと詳しく